﻿#ifndef __IAnimationRecord_H__
#define __IAnimationRecord_H__

#include <lampe/types.h>
#include <IAnimatedMeshSceneNode.h>
#include <lampe/IReferenceCounted.h>
#include "IAnimationCallback.h"

namespace lampe{
namespace animation{

//class CAnimation;
class IAnimation;

/***
* @class IAnimationRecord
* Запись одной костной анимации.
* */
class IAnimationRecord:public virtual lampe::IReferenceCounted{
public:

	/**
	* Возвращяет длину анимации в кадрах
	*
	* @return длина анимации
	* */
	virtual u32 getLength()=0;

	virtual void addAnimationEndListener(IAnimationCallback*listener)=0;
	virtual void removeAnimationEndListener(IAnimationCallback*listener)=0;

	virtual IAnimationCallback*getListener(u32 index)=0;
	virtual u32 getListenerCount()=0;

	/***
	 * Возвращяет анимационную группу, к которой привязана данная анимация
	 *
	 * @return анимационная группа данной анимации
	 */
	virtual IAnimation*getParent()=0;

	/***
	* Возвращяет имя анимации
	*
	* @return имя костной анимации
	* */
	virtual String getName()=0;

	/**
	* Устанавливает имя анимации
	*
	* @param name нове имя костной анимации
	* */
	virtual void setName(String name)=0;
	
	/***
	* Устанавливает скорость анимации
	*
	* @param speed скорость анимации
	* */
	virtual void setSpeed(f32 speed)=0;

	/***
	* Возвращяет скорость данной анимации
	*
	* @return скорость данной анимации
	* */
	virtual f32 getSpeed()=0;

	/***
	 * Устанавливает вермя перехода к этой анимации
	 *
	 * @param time время, за которое старая анимация плавно превратится в данную
	 * */
	virtual void setTransitionTime(f32 time)=0;

	/***
	 * Возвращяет время перехода к этой анимации
	 *
	 * @return время, за которое старая анимация плавно превратится в данную
	 * */
	virtual f32 getTransitionTime()=0;
	
	/***
	* Устанавливает данную анимацию для костного меша
	*
	* @param node узел, которому нужно устанавить данную анимацию
	* */
	virtual void useFor(irr::scene::IAnimatedMeshSceneNode*node)=0;
};



}//namespace animation
}//namespace lampe
#endif
